#include "Sql_list.h"

/**初始化
 * 函数名 Init_Sql_List
 * 参数 
 *      @L 需要初始化的 静态表
 * 返回值
 *      无
 * 功能
 *      对静态表进行初始化
 */
void Init_Sql_List(Sql_list * L)
{
    // 对创建的数据做清空
    memset(L->data , 0 , 50 * sizeof(L->data[0]) );
    // 初始化表的长度 len
    L->len = 0;
}

/**尾插
 * 函数名 tail_insert_list
 * 参数 
 *      @L 需要尾插的 静态表
 *      @data 需要插入的数据
 * 返回值
 *      无
 * 功能
 *      对静态表进行尾插
 */
void tail_insert_list(Sql_list * L  , Elenemt_data data)
{
     // 安全判断
if (NULL==L)
{
    printf("Error: List is null!\n");
    return;
}
if (MAX_SIZ<=L->len)
{
    printf("Error: List is full!\n");
    return;
}\
 // 插入
L->data[L->len]=data;
 // 迭代
 L->len++;
}

/**任意位置插
 * 函数名 tail_insert_list
 * 参数 
 *      @L 需要任意位置插的 静态表
 *      @index 插入的位置
 *      @data 需要插入的数据
 * 返回值
 *      无
 * 功能
 *      对静态表进行任意位置插
 */
void pos_insert_list(Sql_list * L , int index , Elenemt_data data)
{
    // 安全判断
    if (NULL==L)
    {
        printf("Error: List is null!\n");
        return;
    }
    if (MAX_SIZ<=L->len || index<0 || index>L->len)
    {
        printf("Error: Invalid position!\n");
        return;
    }
    // 迭代
    for (size_t i = L->len; i>index-1 ; i--)
    {
        L->data[i] = L->data[i-1];
    }
    L->data[index-1] = data;
    L->len++;
    
}

/**尾删
 * 函数名 tail_del_list
 * 参数 
 *      @L 需要尾删的 静态表
 * 返回值
 *      无
 * 功能
 *      对静态表进行尾删
 */
void tail_del_list(Sql_list * L )
{
    // 安全判断
    if (NULL==L)
    {
        printf("Error: List is null!\n");
        return;
    }
    if (0>=L->len)
    {
        printf("Error: List is empty!\n");
        return;
    }
    L->len--;
}

/**任意位置删
 * 函数名 tail_insert_list
 * 参数 
 *      @L 需要任意位置删的 静态表
 *      @index 删除的位置
 * 返回值
 *      无
 * 功能
 *      对静态表进行任意位置删
 */
void pos_del_list(Sql_list * L , int index)
{

    // 安全判断
    if (NULL==L)
    {
        printf("Error: List is null!\n");
        return;
    }
    if (MAX_SIZ<=L->len || index<0 || index>L->len)
    {
        printf("Error: Invalid position!\n");
        return;
    }
    // 迭代
    for (size_t i = index; i<L->len ; i++)
    {
        L->data[i-1] = L->data[i];
    }
    L->len--;
    
}


/**遍历
 * 函数名 printf_Sql_List
 * 参数 
 *      @L 需要遍历的 静态表
 * 返回值
 *      无
 * 功能
 *      对静态表进行遍历打印
 */
void printf_Sql_List(Sql_list * L)
{
    // 安全判断
    if (NULL==L)
    {
        printf("Error: List is null!\n");
        return;
    }
    if (0==L->len)
    {
        printf("Error: List is empty!\n");
        return;
    }
    
    // 遍历
    for(int i=0;i<L->len;i++)
    {
        printf("姓名：%s性别:%s年龄:%d成绩:%d学号:%d \n",
        L->data[i].name,L->data[i].sex,L->data[i].age,
        L->data[i].sco,L->data[i].id
        );
    }
    
}

/**判空
 * 函数名 IsEmpty_Sql_List
 * 参数 
 *      @L 需要判空的 静态表
 * 返回值
 *      无
 * 功能
 *      对静态表进行判空判断
 */
void IsEmpty_Sql_List(Sql_list * L)
{
    // 安全判断
    if (NULL==L)
    {
        printf("Error: List is null!\n");
        return;
    }
    // 判空
    if (0==L->len)
    {
        printf("List is empty!\n");
    }
    else
    {
        printf("List is not empty!\n");
    }
}

/**清空
 * 函数名 IsEmpty_Sql_List
 * 参数 
 *      @L 需要清空的 静态表
 * 返回值
 *      无
 * 功能
 *      对静态表进行清空判断
 */
void Clear_Sql_List(Sql_list * L)
{
    // 安全判断
    if (NULL==L)
    {
        printf("Error: List is null!\n");
        return;
    }
    memset(L->data , 0 , 50 * sizeof(L->data[0]) );
    L->len = 0;

}

